package com.gitee.chessboard.scan.discern;

import java.util.Set;

/**
 * 识别器
 *
 * @author 敲代码的旺财
 * @date 2021/12/10 13:14
 */
public interface DiscernPortion {

    /**
     * 识别器的名称
     *
     * @return 返回识别器的名称
     */
    String getName();

    /**
     * 识别器的类型
     * 用来对识别器进行分类
     *
     * @return 返回识别器的类型
     */
    String getType();

    /**
     * 对目标进行描述，用于甄别是否满足目标要求
     *
     * @param obj 目标对象特征描述
     */
    void targetDescribe(Object obj);

    /**
     * 进行处理
     *
     * @param obj 需要识别的对象
     * @return 类的读取对象
     */
    Class<?> handle(Object obj);

    /**
     * 设置后一个节点
     *
     * @param discernPortion 识别器
     */
    void setNext(DiscernPortion discernPortion);

    /**
     * 获取结果集
     *
     * @return 结果集
     */
    Set<Class<?>> getDiscernResults();
}
